7. Local Node-Level Measures

Assistant Prof. Dr. Siwachoat Srisuttiyakorn

Department of Educational Research and Psychology
Faculty of Education Chulalongkorn University

2025-03-15

Outline

บทเรียนนี้จะกล่าวถึงตัวชี้วัดคุณลักษณะของเครือข่ายระดับบุคคล (local-level measures)

  • Ego-network measures (local measures) – ทำความเข้าใจคุณลักษณะของเครือข่ายรอบโหนด/บุคคล

  • Centrality measures – การวัดตำแหน่งของโหนดเชิงศูนย์กลาง

1. Ego-network measures

  • Social Capital – คุณลักษณะของโหนดหรือความสัมพันธ์ในเครือข่ายช่วยสร้างโอกาสหรือความได้เปรียบในการประสบความสำเร็จ อย่างไร

  • Social Influence – โหนดแต่ละโหนดได้รับอิทธิพลจาก Alters อย่างไรในเชิงของความเชื่อ ทัศนคติ บรรทัดฐานทางสังคม พฤติกรรม แนวปฏิบัติ หรือเงื่อนไขต่าง ๆ

ตัวชี้วัด local node-level ทำหน้าที่เป็นได้ทั้ง ตัวแปรอิสระเพื่อทำนายผลลัพธ์ที่สนใจ และถูกวิเคราะห์เป็นตัวแปรตามก็ได้ เพื่ออธิบาย/ค้นหาตัวแปรอิสระที่มีความสัมพันธ์หรือเป็นสาเหตุของคุณลักษณะของเครือข่ายระดับโหนดนี้

  • โหนดที่มีเครือข่ายกว้างขวาง (popularity สูง) —> ประสบความสำเร็จสูง

  • มีปัจจัยใดที่ทำให้บุคคล/โหนดมีความ popularity สูง?

1. Ego-network measures

  • Egonet – เครือข่ายย่อยที่เป็นส่วนหนึ่งของเครือข่ายทั้งหมด ประกอบด้วย โหนดที่เรียกว่า ego และโหนดอื่น ๆ ที่เชื่อมโยงกับ ego โดยตรง เรียกว่า alters

  • การเก็บรวบรวมข้อมูลของ egonet สามารถทำได้ 2 ลักษณะ

    • personal-network research design

    • whole-network research design

1. Ego-network measures

  • Tie composition — ลักษณะความสัมพันธ์ที่ ego มีกับ alters

    • จำนวน/สัดส่วนของความสัมพันธ์แต่ละประเภทของ ego

    • ค่าเฉลี่ย/ค่าสูงสุด/มัธยฐานของระดับความสัมพันธ์/ระยะเวลาความสัมพันธ์

  • Alter composition — คุณลักษณะของ alters ที่ ego ไปมีความสัมพันธ์ด้วย

    • จำนวน/สัดส่วนของ alter แต่ละประเภทที่ ego มี

    • ค่าเฉลี่ย/ค่าสูงสุด/มัธยฐานของคุณลักษณะเชิงปริมาณของ alter

1. Ego-network measures

  • Ego-alter similarity — ความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่สนใจ

    • selection: ego สร้างความสัมพันธ์กับบุคลที่มีคุณลักษณะคล้ายกับตัวเองตั้งแต่แรก

    • inflluence: ego มีปฏิสัมพันธ์กับ alter ไประยะเวลาหนึ่งทำให้เกิดการเปลี่ยนแปลงตนเองให้คล้ายกับ alter มากขึ้น

      • เพศ สาขาวิชา กิจกรรมที่ชอบเข้าร่วม รายวิชาเลือกที่ลงทะเบียน/ชอบ —> แนวโน้ม/จำนวนของ ties ของ ego กับ alters ที่มีคุณลักษณะเหมือนกัน

      • ค่าเฉลี่ย/summary stat ของความคล้ายคลึงระหว่างคุณลักษณะของ ego กับ alters เช่น ค่าเฉลี่ยความแตกต่างของอายุ /จำนวนชั่วโมงการอ่านหนังสือ ระหว่าง ego กับ alter

      • correlation ระหว่างการมี/ไม่มี ties กับความคล้ายคลึงหรือความแตกต่างของคุณลักษณะ

1. Ego-network measures

  • Ego-network structure — เน้นอธิบายรูปร่าง (shape) และความเชื่อมโยงกัน (cohesiveness) ของเครือข่ายรอบ ego

    • structural hole

    • bridging between alters

    • ตัวชี้วัดสำหรับ whole network หลายตัวก็สามารถนำมาประยุกต์ใช้ได้ เช่น density, centralization, number of components, average distance

2. Tie Composition: Degree

  • ประเภทและระดับความสัมพันธ์ระหว่าง ego กับ alters

  • Binary network data: กำหนดให้ \(x_{ijq}\) แทนความสัมพันธ์ q ระหว่าง ego ที่ i กับ alter ที่ j โดยที่ \(x_{ijq} = 1\) หมายถึงมีความสัมพันธ์ จำนวนความสัมพันธ์แต่ละประเภทที่ ego i มี สามารถเขียนได้ดังนี้ (จำนวนความสัมพันธ์ของ node นี้เรียกว่า degree ของ ego)

\[ d_{iq} = \sum_{j} x_{ijq} \]

2. Tie Composition: Agresti’s index

  • วัดระดับของความแตกต่าง (heterogeneity) ของความสัมพันธ์ที่แต่ละ ego มี

  • มีค่าอยู่ในช่วง 0-1 ใกล้ 1 แสดงว่าเครือข่ายของ ego มีความหลากหลายสูง

\[ IQV = \frac{1-\sum_{q=1}^{Q} p_{iq}^{2}}{1-\frac{1}{Q}} \]

โดยที่ \(p_{iq}\) คือ สัดส่วนของความสัมพันธ์แบบ q ที่ ego i มี กล่าวคือเท่ากับ จำนวน degree หารด้วยผลรวมของ degree ทั้งหมดของ ego i ในทุกความสัมพันธ์ ส่วน \(Q\) คือจำนวนประเภทของความสัมพันธ์ทั้งหมด

### calculate ego IQV: รับ data.frame ของ degree
### คอลัมน์แรกต้องเป็น node name
### คอลัมน์ที่เหลือเป็น degree ของ ego แต่ละประเภท
ego_iqv <- function(degree_df) {
  degree_df %>%
    pivot_longer(cols = -1, names_to = "Tie", values_to = "Outdegree") %>%
    group_by(node) %>%
    mutate(Q = length(Outdegree),
           p = Outdegree / sum(Outdegree),
           ) %>% 
    reframe(
              IQV = (1 - sum(p^2)) / (1 - 1/Q)) %>%
    ungroup() %>% 
    unique()
}

degree_df %>% 
  rownames_to_column("node") %>% 
  ego_iqv() %>% 
  bind_cols(degree_df)
# A tibble: 14 × 8
   node    IQV outdegree_game outdeg_conflict outdeg_friendship
 * <chr> <dbl>          <dbl>           <dbl>             <dbl>
 1 I1    0.686              4               0                 1
 2 I3    0                  0               0                 0
 3 S1    0.881              6               0                 3
 4 S2    0.6                5               0                 0
 5 S4    0.917              6               0                 4
 6 W1    0.845              6               4                 3
 7 W2    0.732              5               3                 0
 8 W3    0.674              3               7                 0
 9 W4    0.905              5               5                 3
10 W5    0.892              4               5                 3
11 W6    0.911              4               5                 3
12 W7    0.96               5               5                 4
13 W8    0.811              0               0                 0
14 W9    0.919              3               4                 2
# ℹ 3 more variables: outdeg_antagonistic <dbl>, outdeg_help <dbl>,
#   outdeg_trade <dbl>

2. Tie Composition: Agresti’s index

degree_df <- data.frame(
outdegree_game = Hawthorne_BankWiring$Game %>% 
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_conflict = Hawthorne_BankWiring$Conflict %>% 
  graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_friendship = Hawthorne_BankWiring$Friendship %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_antagonistic = Hawthorne_BankWiring$Antagonistic %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_help = Hawthorne_BankWiring$Help %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out"),

outdeg_trade = Hawthorne_BankWiring$TradeJobs %>%
   graph_from_adjacency_matrix(mode = "directed") %>% 
  igraph::degree(mode = "out")

)
# A tibble: 14 × 2
   node    IQV
   <chr> <dbl>
 1 I1    0.686
 2 I3    0    
 3 S1    0.881
 4 S2    0.6  
 5 S4    0.917
 6 W1    0.845
 7 W2    0.732
 8 W3    0.674
 9 W4    0.905
10 W5    0.892
11 W6    0.911
12 W7    0.96 
13 W8    0.811
14 W9    0.919

3. Valued Tie Composition

  • กรณีที่เรามีข้อมูลความสัมพันธ์ที่มีค่าเชิงปริมาณ (valued tie data) ตัวชี้วัดระดับ/ความแข็งแรงของความสัมพันธ์ที่ ego มีต่อ alters สามารถทำได้โดยใช้ summary stat ของค่าความสัมพันธ์ดังกล่าว เช่น ค่าเฉลี่ย หรือมัธยฐาน หรือปริมาณอื่น ๆ ที่สะท้อนความสัมพันธ์หรือการสื่อสารทั้งหมดที่ ego มีกับ alters
# ฟังก์ชันสร้างตารางสรุปสำหรับแต่ละโหนด
### ข้อมูลนำเข้า `graph` ต้องเป็น weight igraph object
create_summary_table <- function(graph) {
  # ดึงค่าทั้งหมดของ strength (น้ำหนักรวมของเส้นเชื่อมแต่ละโหนด)
  node_strengths <- strength(graph, mode = "all", weights = E(graph)$weight)
  
  # ดึง alter ของแต่ละโหนด (degree)
  num_alters <- degree(graph, mode = "all")

  # ดึงน้ำหนักของเส้นเชื่อม (tie strengths) เป็นรายการของแต่ละโหนด
  tie_strength_list <- lapply(V(graph), function(v) {
    incident_edges <- E(graph)[incident(graph, v, mode = "all")]
    edge_weights <- incident_edges$weight
    if (length(edge_weights) == 0) return(NA) # กรณีโหนดไม่มี edge
    return(edge_weights)
  })
  
  # สร้าง DataFrame
  summary_df <- data.frame(
    Node = V(graph)$name,  
    Number_of_alters = num_alters,
    Sum_of_tie_strengths = node_strengths,
    Average_tie_strength = sapply(tie_strength_list, mean, na.rm = TRUE),
    SD_tie_strength = sapply(tie_strength_list, sd, na.rm = TRUE),
    Median_tie_strength = sapply(tie_strength_list, median, na.rm = TRUE),
    Minimum_tie_strength = sapply(tie_strength_list, min, na.rm = TRUE),
    Maximum_tie_strength = sapply(tie_strength_list, max, na.rm = TRUE),
    Range_of_tie_strength = sapply(tie_strength_list, function(x) max(x, na.rm = TRUE) - min(x, na.rm = TRUE))
  )
  
  return(summary_df)
}

3. Valued Tie Composition

    Node Number_of_alters Sum_of_tie_strengths Average_tie_strength
A01  A01               16                   42             2.625000
A02  A02                9                   29             3.222222
A03  A03               10                   33             3.300000
A04  A04                6                   18             3.000000
A05  A05                3                    8             2.666667
A06  A06                4                   14             3.500000
A07  A07                4                   13             3.250000
A08  A08                4                   13             3.250000
A09  A09                5                   17             3.400000
A10  A10                2                    3             1.500000
A11  A11                3                    8             2.666667
A12  A12                1                    3             3.000000
A13  A13                2                    4             2.000000
A14  A14                5                   17             3.400000
A15  A15                2                    5             2.500000
A16  A16                2                    7             3.500000
A17  A17                2                    6             3.000000
A18  A18                2                    3             1.500000
A19  A19                2                    3             1.500000
A20  A20                3                    5             1.666667
A21  A21                2                    4             2.000000
A22  A22                2                    4             2.000000
A23  A23                2                    5             2.500000
A24  A24                5                   21             4.200000
A25  A25                3                    7             2.333333
A26  A26                3                   14             4.666667
A27  A27                2                    6             3.000000
A28  A28                4                   13             3.250000
A29  A29                3                    6             2.000000
A30  A30                4                   13             3.250000
A31  A31                4                   11             2.750000
A32  A32                6                   21             3.500000
A33  A33               12                   38             3.166667
A34  A34               17                   48             2.823529
    SD_tie_strength Median_tie_strength Minimum_tie_strength
A01       0.9574271                 2.5                    1
A02       1.6414763                 3.0                    1
A03       1.6363917                 3.0                    1
A04       0.0000000                 3.0                    3
A05       0.5773503                 3.0                    2
A06       1.0000000                 3.0                    3
A07       1.2583057                 3.0                    2
A08       0.9574271                 3.5                    2
A09       1.1401754                 3.0                    2
A10       0.7071068                 1.5                    1
A11       0.5773503                 3.0                    2
A12              NA                 3.0                    3
A13       1.4142136                 2.0                    1
A14       0.8944272                 3.0                    3
A15       0.7071068                 2.5                    2
A16       0.7071068                 3.5                    3
A17       0.0000000                 3.0                    3
A18       0.7071068                 1.5                    1
A19       0.7071068                 1.5                    1
A20       0.5773503                 2.0                    1
A21       1.4142136                 2.0                    1
A22       0.0000000                 2.0                    2
A23       0.7071068                 2.5                    2
A24       0.8366600                 4.0                    3
A25       0.5773503                 2.0                    2
A26       2.5166115                 5.0                    2
A27       1.4142136                 3.0                    2
A28       0.9574271                 3.5                    2
A29       0.0000000                 2.0                    2
A30       0.9574271                 3.5                    2
A31       0.5000000                 3.0                    2
A32       1.9748418                 3.0                    2
A33       1.1934163                 3.0                    1
A34       1.1850788                 3.0                    1
    Maximum_tie_strength Range_of_tie_strength
A01                    5                     4
A02                    6                     5
A03                    6                     5
A04                    3                     0
A05                    3                     1
A06                    5                     2
A07                    5                     3
A08                    4                     2
A09                    5                     3
A10                    2                     1
A11                    3                     1
A12                    3                     0
A13                    3                     2
A14                    5                     2
A15                    3                     1
A16                    4                     1
A17                    3                     0
A18                    2                     1
A19                    2                     1
A20                    2                     1
A21                    3                     2
A22                    2                     0
A23                    3                     1
A24                    5                     2
A25                    3                     1
A26                    7                     5
A27                    4                     2
A28                    4                     2
A29                    2                     0
A30                    4                     2
A31                    3                     1
A32                    7                     5
A33                    5                     4
A34                    5                     4
g <- Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE)

Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE) %>% 
  plot(
    edge.width = E(.)$weight > 4
    )

3. Valued Tie Composition

## strength dataset
valued_g <- Zachary_KarateClub$Strength %>% 
  graph_from_adjacency_matrix(mode = "undirected", weight = TRUE)

create_summary_table(g)
    Node Number_of_alters Sum_of_tie_strengths Average_tie_strength
A01  A01               16                   42             2.625000
A02  A02                9                   29             3.222222
A03  A03               10                   33             3.300000
A04  A04                6                   18             3.000000
A05  A05                3                    8             2.666667
A06  A06                4                   14             3.500000
A07  A07                4                   13             3.250000
A08  A08                4                   13             3.250000
A09  A09                5                   17             3.400000
A10  A10                2                    3             1.500000
A11  A11                3                    8             2.666667
A12  A12                1                    3             3.000000
A13  A13                2                    4             2.000000
A14  A14                5                   17             3.400000
A15  A15                2                    5             2.500000
A16  A16                2                    7             3.500000
A17  A17                2                    6             3.000000
A18  A18                2                    3             1.500000
A19  A19                2                    3             1.500000
A20  A20                3                    5             1.666667
A21  A21                2                    4             2.000000
A22  A22                2                    4             2.000000
A23  A23                2                    5             2.500000
A24  A24                5                   21             4.200000
A25  A25                3                    7             2.333333
A26  A26                3                   14             4.666667
A27  A27                2                    6             3.000000
A28  A28                4                   13             3.250000
A29  A29                3                    6             2.000000
A30  A30                4                   13             3.250000
A31  A31                4                   11             2.750000
A32  A32                6                   21             3.500000
A33  A33               12                   38             3.166667
A34  A34               17                   48             2.823529
    SD_tie_strength Median_tie_strength Minimum_tie_strength
A01       0.9574271                 2.5                    1
A02       1.6414763                 3.0                    1
A03       1.6363917                 3.0                    1
A04       0.0000000                 3.0                    3
A05       0.5773503                 3.0                    2
A06       1.0000000                 3.0                    3
A07       1.2583057                 3.0                    2
A08       0.9574271                 3.5                    2
A09       1.1401754                 3.0                    2
A10       0.7071068                 1.5                    1
A11       0.5773503                 3.0                    2
A12              NA                 3.0                    3
A13       1.4142136                 2.0                    1
A14       0.8944272                 3.0                    3
A15       0.7071068                 2.5                    2
A16       0.7071068                 3.5                    3
A17       0.0000000                 3.0                    3
A18       0.7071068                 1.5                    1
A19       0.7071068                 1.5                    1
A20       0.5773503                 2.0                    1
A21       1.4142136                 2.0                    1
A22       0.0000000                 2.0                    2
A23       0.7071068                 2.5                    2
A24       0.8366600                 4.0                    3
A25       0.5773503                 2.0                    2
A26       2.5166115                 5.0                    2
A27       1.4142136                 3.0                    2
A28       0.9574271                 3.5                    2
A29       0.0000000                 2.0                    2
A30       0.9574271                 3.5                    2
A31       0.5000000                 3.0                    2
A32       1.9748418                 3.0                    2
A33       1.1934163                 3.0                    1
A34       1.1850788                 3.0                    1
    Maximum_tie_strength Range_of_tie_strength
A01                    5                     4
A02                    6                     5
A03                    6                     5
A04                    3                     0
A05                    3                     1
A06                    5                     2
A07                    5                     3
A08                    4                     2
A09                    5                     3
A10                    2                     1
A11                    3                     1
A12                    3                     0
A13                    3                     2
A14                    5                     2
A15                    3                     1
A16                    4                     1
A17                    3                     0
A18                    2                     1
A19                    2                     1
A20                    2                     1
A21                    3                     2
A22                    2                     0
A23                    3                     1
A24                    5                     2
A25                    3                     1
A26                    7                     5
A27                    4                     2
A28                    4                     2
A29                    2                     0
A30                    4                     2
A31                    3                     1
A32                    7                     5
A33                    5                     4
A34                    5                     4

3. Valued Tie Composition

a26_g <- valued_g %>% make_ego_graph(order = 1, nodes = "A26")
a26_g[[1]] %>% 
  plot(
    edge.width = E(a26_g[[1]])$weight,
  )

create_summary_table(valued_g) %>% 
  pivot_longer(cols = -Node, names_to = "type", values_to = "value") %>%
  ggplot(aes(x=value, y=0))+
  geom_boxplot(outlier.alpha = 0)+
  geom_jitter(height = 0.1, aes(col = factor(ifelse(Node == "A26",1,0))))+
  facet_wrap(~type, scales = "free")+
  theme(legend.position = "none")

3. Valued Tie Composition

4. Alter Composition

ตัวชี้วัดกลุ่มนี้มีวัตถุประสงค์เพื่อทำความเข้าใจว่า ego แต่ละตัวมีการเชื่อมโยง/สัมพันธ์กับ alters ประเภทไหนบ้าง

  • categorical attributes

  • continuous attributes

categorical attributes

ตัวอย่างเครือข่ายความเป็นเพื่อนในบริษัท เรามีวัตถุประสงค์ต้องการวิเคราะห์ว่า ego แต่ละคนมีเพื่อนอยู่ในแผนกใดบ้างของบริษัท

# A tibble: 21 × 13
# Groups:   ego, department_ego [21]
   ego   department_ego     IQV freq_0 freq_1 freq_2 freq_3 freq_4  prop_0
   <chr>          <int>   <dbl>  <int>  <int>  <int>  <int>  <int>   <dbl>
 1 A01                4   0.6        0      2      0      0      3   0    
 2 A02                4   0.833      0      1      0      1      1   0    
 3 A03                2   0          0      0      2      0      0   0    
 4 A04                4   0.625      0      3      0      0      3   0    
 5 A05                2   0.867      0      2      3      1      1   0    
 6 A06                1   0.833      1      3      1      0      1   0.167
 7 A07                0 NaN          0      0      0      0      0   0    
 8 A08                1   0          0      0      0      0      1   0    
 9 A09                2 NaN          0      0      0      0      0 NaN    
10 A10                3   0.714      0      2      4      0      1   0    
# ℹ 11 more rows
# ℹ 4 more variables: prop_1 <dbl>, prop_2 <dbl>, prop_3 <dbl>, prop_4 <dbl>

continuous attribute

แนวทางข้างต้นสามารถนำมาใช้กับ attribute แบบต่อเนื่องได้ เช่น ระยะเวลาทำงานในองค์กร (tenue)

  • จำนวนระยะเวลาทำงานโดยเฉลี่ยของ alter (เพื่อนร่วมงาน) ของแต่ละ ego <— ระยะเวลาทำงานของ alter สะท้อนแหล่งทรัพยากร/ระดับความเชี่ยวชาญของผู้เชี่ยวชาญที่ ego สามารถเข้าถึงได้
# A tibble: 19 × 8
   ego   num_friend sum_tenure mean_tenure sd_tenure min_tenure max_tenure
   <chr>      <int>      <dbl>       <dbl>     <dbl>      <dbl>      <dbl>
 1 A01            5       52.0       10.4       5.67       4.67       19.6
 2 A02            3       30.9       10.3       1.90       9.08       12.5
 3 A03            2       15.3        7.63      3.95       4.83       10.4
 4 A04            6       66.2       11.0       4.96       4.67       19.6
 5 A05            7       92.2       13.2       7.86       4.83       27  
 6 A06            6       88.8       14.8       8.80       5.42       30  
 7 A08            1        7.5        7.5      NA          7.5         7.5
 8 A10            7       58.1        8.30      3.81       3.33       12.8
 9 A11           13      113.         8.71      4.86       0.25       19.6
10 A12            4       41.8       10.4       2.45       7.5        12.5
11 A13            2       30.3       15.2      16.7        3.33       27  
12 A14            2       38.4       19.2      15.3        8.42       30  
13 A15            8      101.        12.6       9.69       3.33       28  
14 A16            2       28.9       14.5       7.25       9.33       19.6
15 A17           18      225.        12.5       8.20       3.33       30  
16 A18            1       19.6       19.6      NA         19.6        19.6
17 A19            9      111.        12.4       6.97       3.33       27  
18 A20            2       36.1       18.0      12.7        9.08       27  
19 A21            4       50         12.5       4.99       8.92       19.6
# ℹ 1 more variable: range_tenure <dbl>

5. Ego-alter similarity

วัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่สนใจ เช่น การวิเคราะห์ความคล้ายในเชิงของข้อมูลภูมิหลัง บุคลิกภาพ ทัศนคติ พฤติกรรม หรือผลการเรียน จุดที่แตกต่างกันระหว่างการวิเคราะห์ประเภทนี้กับการวิเคราะห์ที่ผ่านมาคือ การวิเคราะห์ความคล้ายคลึงจะต้องใช้ข้อมูลคุณลักษณะของทั้ง ego กับ alter มาวิเคราะห์ร่วมกััน

กระบวนการเชิงสังคมที่ทำให้เกิดความคล้ายคลึงระหว่าง ego กับ alter อาจเกิดจากสองกระบวนการหลัก ได้แก่

  • Social selection : หมายถึงกระบวนการที่ ego เลือกสร้างความสัมพันธ์กับ alter ที่มีลักษณะคล้ายตัวเอง เช่น เพศ เชื้อชาติ ระดับการศึกษา ศาสนา หรืออื่น ๆ ปรากฏการณ์นี้เรียกว่า homophily (การคบหาคนที่เหมือนตนเอง)

  • Social influence : หมายถึงกระบวนการที่ ego และ alters มีแนวโน้มที่จะปรับเปลี่ยนพฤติกรรม หรือคุณลักษณะต่าง ๆ ให้คล้ายคลึงกันมากขึ้นเมื่ออยู่ร่วมกันไปนาน ๆ เช่น แฟนกันมักมีพฤติกรรมที่คล้ายกันมากขึ้นเมื่ออยู่ร่วมกันไปนาน ๆ หรือเพื่อนร่วมห้องเรียนเดียวกันที่อาจมีพฤติกรรมบางประการที่เปลี่ยนให้เหมือนกัน

ในทำนองเดียวกับการวิเคราะห์ส่วนอื่น ความคล้ายคลึงดังกล่าวจำแนกการวิเคราะห์ตามประเภทของข้อมูลดังนี้

  • Categorical attributes

  • Continuous attributes

5.1 categorical attributes

มีหลายตัวชี้วัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของตัวแปรจัดประเภท ได้แก่

  • จำนวนเพื่อนร่วมงานที่อยู่ใน department เดียวกับ ego (a)

  • จำนวนเพื่อนร่วมงานที่อยู่คนละ department กับ ego (b)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่ department เดียวกับ ego (c)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่คนละ department กับ ego (d)

  • สัดส่วน alter ที่อยู่ในกลุ่มเดียวกับ ego (proportion same: S measure)

  • EI index

  • Odds ratio & Log odds ratio

  • Yule’s Q

## จำนวนเพื่อนร่วมงานแต่ละรูปแบบ
Krackhardt_HighTech$Friendship %>%
  data.frame() %>%
  rownames_to_column("ego") %>%
  pivot_longer(cols= -ego, names_to = "alter", values_to = "tie") |> 
  left_join(y = ego_data, by = "ego") |> 
  rename(department_ego = 4) |> 
  left_join(y = ego_data, by = join_by("alter" == "ego")) |> 
  rename(department_alter = 5) |> 
  filter(ego != alter) |> 
  group_by(ego,tie,department_ego, department_alter) |> count() |> 
  mutate(type = case_when(
    tie >0 & department_ego == department_alter ~ "a",
    tie >0 & department_ego != department_alter ~ "b",
    tie  == 0 & department_ego == department_alter ~ "c",
    tie == 0 & department_ego != department_alter ~ "d",
  ))
# A tibble: 146 × 6
# Groups:   ego, tie, department_ego, department_alter [146]
   ego     tie department_ego department_alter     n type 
   <chr> <int>          <int>            <int> <int> <chr>
 1 A01       0              4                0     1 d    
 2 A01       0              4                1     3 d    
 3 A01       0              4                2     8 d    
 4 A01       0              4                3     3 d    
 5 A01       1              4                1     2 b    
 6 A01       1              4                4     3 a    
 7 A02       0              4                0     1 d    
 8 A02       0              4                1     4 d    
 9 A02       0              4                2     8 d    
10 A02       0              4                3     2 d    
# ℹ 136 more rows

5.1 categorical attributes

  • สัดส่วนความคล้าย (proportion same: S)

\[ S = \frac{ego \cap alter}{Total} \]

  • E-I Index (Krackhardt & Stern, 1988) เป็นตัวชี้วัดที่ตรงข้ามกับ homophily โดยค่าที่มากขึ้นหมายถึง heterophily สูงขึ้น

\[ EI = \frac{E-I}{E+I} \]

โดยที่ E = จำนวน ties ไปยัง alters ที่อยู่ต่างกลุ่มกับ ego (external ties) และI = จำนวน ties ไปยัง alters ที่อยู่ในกลุ่มเดียวกับ ego (internal ties)

ดังนั้นถ้า EI = -1 หมายถึง ego มีความสัมพันธ์กับ alter ที่เหมือนกับตัวเอง 100%, EI = 0 หมายถึง ego มีความสัมพันธ์กับ alter ที่สมดุลระหว่างคนที่เหมือนกับแตกต่างกับตนเอง ส่วน EI = 1 หมายถึง ego มีความสัมพันธ์กับ alter ที่แตกต่างกับตนเอง

5.1 categorical attributes

สมมุติว่าวัตถุประสงค์คือการวัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของแผนกงานที่ทำงาน การคำนวณค่าสัดส่วนความคล้ายสามารถดำเนินการได้ง่าย ๆ ดังนี้ การคำนวณดัชนีต่าง ๆ สามารถทำได้ผ่าน KruRooSocNet ดังนี้

analyze_categorical_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = ego_data,
  category_col = "Department"
) |> glimpse()
Rows: 21
Columns: 11
$ node                  <chr> "A01", "A02", "A03", "A04", "A05", "A06", "A07",…
$ `Ego's department`    <int> 4, 4, 2, 4, 2, 1, 0, 1, 2, 3, 3, 1, 2, 2, 2, 4, …
$ a                     <int> 3, 1, 2, 3, 3, 3, 0, 0, 0, 0, 1, 2, 1, 1, 5, 2, …
$ b                     <int> 2, 2, 0, 3, 4, 3, 0, 1, 0, 7, 12, 2, 1, 1, 3, 0,…
$ c                     <int> 0, 2, 5, 0, 4, 1, 0, 4, 7, 2, 1, 2, 6, 6, 2, 1, …
$ d                     <int> 15, 15, 13, 14, 9, 13, 20, 15, 13, 11, 6, 14, 12…
$ `Proportion same (S)` <dbl> 0.60000000, 0.33333333, 1.00000000, 0.50000000, …
$ `EI index`            <dbl> -0.2000000, 0.3333333, -1.0000000, 0.0000000, 0.…
$ `Odds ratio`          <dbl> Inf, 3.750000, Inf, Inf, 1.687500, 13.000000, NA…
$ `Log odds ratio`      <dbl> Inf, 1.3217558, Inf, Inf, 0.5232481, 2.5649494, …
$ `Yule's Q`            <dbl> 1.0000000, 0.5789474, 1.0000000, 1.0000000, 0.25…

Realized Homophily = Availability + Preference Homophily

  • Availability Homophily = ความคล้ายคลึงระหว่าง ego กับ alters ที่เกิดขึ้นจากโครงสร้างของเครือข่าย (โอกาสในธรรมชาติ) ไม่ได้เกิดขึ้นจากการเลือกของ ego แต่เกิดขึ้นจากสัดส่วนของประชากรที่มีอยู่ในเครือข่าย

  • Preference Homophily = ระดับของ Ego-Alter Similarity ที่เกิดขึ้นจาก ความชอบส่วนตัวของ Ego ในการเลือก Alters

ปัญหาคือเราจะสามารถวัด Preference Homophily ได้อย่างไร เพราะในความเป็นจริง Availability Homophily อาจเป็นตัวแปรแทรกซ้อนที่ทำให้ไม่สามารถสังเกต Preference Homophily ได้อย่างถูกต้อง

  • เปรียบเทียบความถี่ประเภท alter: a, b, c และ d กับ expected frequency ทางทฤษฎี –> เทียบเท่ากับการทำ contingency table ระหว่างการเป็นเพื่อนกัน กับ การเป็นบุคคลประเภทเดียวกัน

  • เปรียบเทียบอัตราส่วนการเป็นเพื่อนกับบุคคลประเภทหนึ่ง กับ อัตราส่วนการไม่เป็นเพื่อนกับบุคคลประเภทนั้น –> [a/b]/[c/d] ค่านี้เรียกว่า Odd Ratio

Odd Ratio

\[ OR = \frac{a/b}{c/d} = \frac{a \times d}{b \times c} \]

  • จำนวนเพื่อนร่วมงานที่อยู่ใน department เดียวกับ ego (a)

  • จำนวนเพื่อนร่วมงานที่อยู่คนละ department กับ ego (b)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่ department เดียวกับ ego (c)

  • จำนวนคนที่ไม่ใช่เพื่อนร่วมงานแต่อยู่คนละ department กับ ego (d)

การแปลความหมาย

  • OR = 1 แปลว่าไม่มีความสัมพันธ์ระหว่างการเป็นเพื่อนกันในเครือข่ายกับการมีคุณลักษณะเดียวกันในเครือข่าย

  • OR > 1 แสดงว่า ego มีแนวโน้มเลือก alter ที่มีคุณลักษณะเหมือนกับตัวเอง

  • 0 < OR < 1 แสดงว่า ego มีแนวโน้มเลือก alter ที่มีคุณลักษณะแตกต่างจากตัวเอง

# A tibble: 21 × 11
   node  `Ego's department`     a     b     c     d `Proportion same (S)`
   <chr>              <int> <int> <int> <int> <int>                 <dbl>
 1 A01                    4     3     2     0    15                 0.6  
 2 A02                    4     1     2     2    15                 0.333
 3 A03                    2     2     0     5    13                 1    
 4 A04                    4     3     3     0    14                 0.5  
 5 A05                    2     3     4     4     9                 0.429
 6 A06                    1     3     3     1    13                 0.5  
 7 A07                    0     0     0     0    20                NA    
 8 A08                    1     0     1     4    15                 0    
 9 A09                    2     0     0     7    13                NA    
10 A10                    3     0     7     2    11                 0    
# ℹ 11 more rows
# ℹ 4 more variables: `EI index` <dbl>, `Odds ratio` <dbl>,
#   `Log odds ratio` <dbl>, `Yule's Q` <dbl>

Yule’s Q coefficient

\[ Q = \frac{ad-bc}{ad+bc} \]

  • Q = 1 หมายความว่า ego มีความสัมพันธ์กับ alter ที่มีคุณลักษณะเฉพาะเหมือนกับตนเอง

  • Q = 0 หมายความว่า ego มีแนวโน้มที่จะมีความสัมพันธ์กับ alter อย่างสมดุล ระหว่าง alter ที่มีคุณลักษณะเหมือนและแตกต่างกับ ego

  • Q = -1 ….

analyze_categorical_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = ego_data,
  category_col = "Department"
) |> 
select(node, 11)
# A tibble: 21 × 2
   node  `Yule's Q`
   <chr>      <dbl>
 1 A01        1    
 2 A02        0.579
 3 A03        1    
 4 A04        1    
 5 A05        0.256
 6 A06        0.857
 7 A07       NA    
 8 A08       -1    
 9 A09       NA    
10 A10       -1    
# ℹ 11 more rows

Yule’s Q coefficient

ลองพิจารณาเปรียบเทียบความคล้ายขอ A03 กับ alter และ A08 กับ alter

analyze_categorical_similarity(
    adj_matrix = Krackhardt_HighTech$Friendship,
  node_attributes = ego_data,
  category_col = "Department") |> 
  filter(node %in% c("A03", "A08")) %>% 
  select(node, a, b, c, d,11)
# A tibble: 2 × 6
  node      a     b     c     d `Yule's Q`
  <chr> <int> <int> <int> <int>      <dbl>
1 A03       2     0     5    13          1
2 A08       0     1     4    15         -1

Ego & Alter Similarity

Ego & Alter Similarity

5.2 continuous attributes

เราสามารถใช้แนวทางที่คล้ายกับการวัด Ego-Alter Similarity สำหรับตัวแปรเชิงหมวดหมู่ (Categorical) มาประยุกต์ใช้กับตัวแปรเชิงต่อเนื่อง (Continuous) เช่น อายุ หรือประสบการณ์ทำงาน

  • ค่า absolute difference ระหว่างคุณลักษณะของ ego กับ alter แนวคิดนี้คล้าย ๆ S measure ใน categorical attribute โดยค่าเท่ากับ 0 หมายถึงไม่มีความแตกต่างระหว่าง ego กับ alter ในคุณลักษณะนั้น

  • ปัญหาของการวัดด้วยวิธีการนี้ัคือเป็นการเปรียบเทียบความแตกต่างระหว่าง ego กับ alter แต่ละคู่ตรง ๆ แต่ไม่ได้พิจารณาแนวโน้มโดยรวมของเครือข่ายว่ามีการแจกแจงอย่างไร ดังนั้นความแตกต่างระหว่าง ego กับ alter ที่มีคุณลักษณะที่พิจารณาต่ำสุดและสูงสุดของกลุ่ม ก็จะมีค่า absolute difference สูงเสมอ

5.2 continuous attributes

  • วิธีการที่น่าจะปลอดภัยกว่าในการวัดความคล้ายคลึงระหว่าง ego กับ alter ในเชิงของคุณลักษณะที่เป็นเชิงปริมาณคือการพิจารณาทั้งกลุ่มที่ ego เลือกเป็นเพื่อน และกลุ่มที่ ego ไม่ได้เลือกเป็นเพื่อน ขั้นตอนวิธีมีดังนี้

  • สร้างคะแนนตัวชี้วัดความแตกต่างระหว่าง ego กับ โหนดอื่น ๆ ซึ่งมีทั้งเพื่อนและไม่ใช่เพื่อนในเครือข่ายของ ego

    • absolute difference

    • squared difference

    • \(I_{ij} = 1-\frac{|X_i-X_j|}{max(X)-min(X)}\) <– ความหมายจะเป็นความคล้ายคลึงแทน

  • จัดการข้อมูลออกเป็น 2 คอลัมน์ คอลัมน์แรกเป็นคะแนนตัวชี้วัด และคอลัมน์ที่สองเป็นสถานะของ tie ระหว่าง ego และ alter น้ัน ๆ

  • คำนวณ correlation ระหว่างตัวแปรทั้งสอง (เราเรียก correlation นี้ว่า point-biserial correlation)

การแปลผลวิธีการนี้จะคล้ายกับ EI Index ถ้า correlation มีค่าเป็นบวกมาก แสดงว่ามีความสัมพันธ์ระหว่างการเป็นเพื่อนกับความแตกต่าง/ความคล้ายของคุณลักษณะที่พิจารณา แสดงว่า ego มีแนวโน้มเลือกคบเพื่อนที่มีคุณลักษณะที่แตกต่างจากตนเอง (heterophily)

5.2 continuous attributes

การคำนวณค่าดัชนีดังกล่าวทำได้ค่อนข้างยากหากเขียน script เอง ดังนั้นเราสามารถใช้ฟังก์ชันใน KruRooSocNet ช่วยได้

Rows: 21
Columns: 6
$ Node                        <chr> "A01", "A02", "A03", "A04", "A05", "A06", …
$ `Ego's attribute value`     <dbl> 33, 42, 40, 33, 32, 59, 55, 34, 62, 37, 46…
$ `Abs diff: ego-mean alters` <dbl> 7.05, 2.40, 0.30, 7.05, 8.10, 20.25, 16.05…
$ `Corr: tie-abs diff`        <dbl> -3.226872e-01, -4.239166e-02, -1.386851e-0…
$ `Corr: tie-squared diff`    <dbl> -0.28059031, -0.12697247, -0.14686771, -0.…
$ `Corr: tie-identity coeff`  <dbl> 3.226872e-01, 4.239166e-02, 1.386851e-01, …